iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
Software Development

Laravel專案練習-寶可夢管理系統系列 第 12

Day12寶可夢專案-部署練習-虛擬伺服器軟體安裝-Nginx設定-遇到的問題

  • 分享至 

  • xImage
  •  

前情提要:

根據上一篇我將nginx基本的設定設好了之後,遇到了以下問題。

突發問題發生:

從外部試著連入我的主機, 出現

502 Bad Gateway


nginx/1.18.0 (Ubuntu)

於是我嘗試檢查我的FPM的狀況

systemctl list-units --type=service | grep php(未顯示任何東西)

sudo systemctl start php8.2-fpm
Failed to start php8.2-fpm.service: Unit php8.2-fpm.service not found.

後來我發現我沒有安裝php-fpm.

  • 安裝FPM

    sudo apt-get update
    sudo apt-get install php8.2-fpm
    
    sudo systemctl start php8.2-fpm
    
    sudo systemctl status php8.2-fpm
    

依然502錯誤

  • apache沒關

    然後確認了fpm有在運作之後, 仍然出現502。

    後來使用curl http://127.0.0.1發現返回在apache的首頁

    懷疑是apache沒關好, 於是用:

    sudo systemctl disable apache2
    
    

500錯誤

後來不會出現502,但出現了500 錯誤, 因為他還停留在nginx預設的錯誤畫面, 於是想說去看看nginx的error.log, 看會不會有什麼描述。

tail -f /var/log/nginx/error.log
結果出現了

1. **`PHP Warning: require(/var/www/pokemonProject/public/../vendor/autoload.php): Failed to open stream: No such file or directory in /var/www/pokemonProject/public/index.php on line 34`**
2. **`PHP Fatal error: Uncaught Error: Failed opening required '/var/www/pokemonProject/public/../vendor/autoload.php' (include_path='.:/usr/share/php') in /var/www/pokemonProject/public/index.php:34`**

//這裡顯示了系統沒有辦法讀到autoload.php, 所以應該是我composer還沒安裝, 以及還未下載其相關套件, 於是用了composer安裝:

sudo apt install composer

結果要composer install的時候出現php 依賴項沒裝, composer會根據他要下載的東西所對應的php依賴項做檢查, 如果沒有他會提醒你(這裡沒有記錄到錯誤畫面)。
安裝或啟用PHP的curl擴展

sudo apt install php8.2-curl

  • 功能: cURL 是一個用於從伺服器傳輸資料的命令行工具。PHP 的 cURL 擴展允許 你從PHP腳本中直接使用cURL功能。

這裡我就不多打了(根據你composer json設定去安裝php依賴套件)。

依然500錯誤

而當我composer安裝好之後, 執行composer install 把相關的依賴套件都安裝好,

還是出現500錯誤(傻眼), 然後我去nginx的error.log看:

tail -f /var/log/nginx/error.log

發現沒有新的錯誤產生(抱歉又漏紀錄了)。

所以我推測應該是有到專案裡, 所以我去專案的log 查看

sudo tail -n 50 storage/logs/laravel.log

出現了[2023-09-12 09:49:39] production.ERROR: No application encryption key has been specified。

看來是我.env文件的APP_KEY沒有設置。

要產生key可以使用以下指令:


php artisan key:generate

結果出現:

The stream or file "/var/www/pokemonProject/storage/logs/laravel.log" could not be opened in append mode: Failed to open stream: Permission denied
The exception occurred while attempting to log: file_put_contents(/var/www/pokemonProject/.env): Failed to open stream: Permission denied

  • 我的解決方法:

    改存儲文件夾權限: 使用下列命令賦予運行應用的用戶適當的權限:

    
    sudo chmod -R 775 /var/www/pokemonProject/storage
    
    

    修改.env文件權限: 確保您的 文件也有正確的權限:

    
    sudo chmod 775 /var/www/pokemonProject/.env
    
    

    更改文件和文件夾所有者

    您可能還需要確保文件和文件夾的所有者是正確的。通常web服務器運行為**www-data**用戶和組。您可以使用 chown 命令修改文件和文件夾的所有者:

    
    sudo chown -R ubuntu:www-data /var/www/pokemonProject/storage
    sudo chown ubuntu:www-data /var/www/pokemonProject/.env
    
    
    • 這個web server的使用者群組可以去相關的設定檔看或更改(像我的話可能是 /etc/nginx/nginx.conf), 裡面應該會看到 user www-data 或是Gruop www-data;

    • 這裡的 R 參數表示「遞歸」,所以它不僅僅會更改 storage 目錄本身的所有者和群組,還會更改 storage 目錄下的所有子目錄和文件的所有者和群組。

    • 這裡我會把使用者設為我目前身份(ubuntu)(這樣我操作者才有基本的權限),然後讓使用者群組設為www-data(讓enginx)有權限對這些檔案操作。

         接著再去執行php artisan key:generate,就可以了。
      
      

結語

畢竟是沒有什麼部署的經驗,所以我相當於是運行的時候看缺什麼才去安裝(老手可能會覺得我很X吧),但因為有記錄這些錯誤下次因該可以快一些。

  • 看error log

    而且這過程我覺得有學到一件事,就是當錯誤出現並且給你的信息含量很少的時候,可以嘗試去看log,除了會帶給你更多的錯誤訊息以外,甚至可以讓你判斷系統目前可能跑到哪了,比如目前在錯誤nginx日誌沒有更新,那就可以推測他可能已不是在nginx這裡出現錯誤,可能已經跑到專案裡了。


上一篇
Day11 寶可夢專案-部署練習-虛擬伺服器軟體安裝--Nginx設定
下一篇
Day13 寶可夢專案-部署練習-虛擬伺服器軟體安裝-mysql設定
系列文
Laravel專案練習-寶可夢管理系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言